package com.chen.tliaswebtest.mapper;

import com.chen.tliaswebtest.pojo.DegreeReport;
import com.chen.tliaswebtest.pojo.Student;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/7/24
 * 学生表映射接口
 */
@Mapper
public interface StudentMapper {
    // 根据班级id查询班级人数
    @Select("select count(*) from student where clazz_id = #{id}")
    int countByClazzId(Integer id);

    // 分页查询
    List<Student> listByPage(String name, Integer degree, Integer clazzId,
                             Integer page, Integer pageSize);

    // 批量删除
    void deleteStudentByIds(List<Integer> ids);

    // 查询全部学员信息
    List<Student> listAll();

    // 添加学员信息
    void addStudent(Student student);

    // 根据id查询学员信息
    Student selectById(Integer id);

    // 修改学员信息
    void updateStudent(Student student);

    // 修改学员违规数据信息
    void updateStudentViolation(Integer id, Integer score);

    // 统计各学历的学员数量
    List<DegreeReport> coutnByDegree();

    // 统计各班级的学员数量
    // 如果查询的记录往Map中封装，可以通过@MapKey注解指定返回的map中的唯一标识是那个字段。【也可以不指定】
    @Select("select ifnull(c.name,'其他') as clazzName, count(*) as count from student s left join clazz c on c.id = s.clazz_id group by s.clazz_id")
    @MapKey("clazzName")
    List<Map<String, Object>> countByClazz();
}
